[Coding043] LeetCode 143

Reorder List

Cook 2024.04.11

More coding records

Get the knowledge flowing and circulating! :)

目录

本题收获

这个程序差点让我放弃编程!

看上去本来很简单,但是思路比较混乱,同时也让我感觉,似乎并不是一天的任何时间都适合编程的,就比如下午15:00左右做这个程序,搞到17:40才把程序的流程理清,到了18:00才最终把文档写完!😓

难点在哪呢?总的来说,还是思路不清。

首先:指针混用,一开始的程序写的时候,有时候用了newStart,有的用了dummy,有的p,有的q,有的r1,有的r2,真是晕头转向。

  • 解法:理清思路再Coding!

然后:思路模糊,一开始用cnt,cnt--(都等于0了)结束了!最后程序我还在用cnt这个为0的变量来辅助衔接链表。

  • 解法:变量前期定义清楚之后,再在后期使用。不要胡乱定义,到处使用。

最后,我想说,不要小看任何一个程序,每个程序都要认真对待。从一开始的时候,就要思路清晰,否则越来越混乱,最后还要重新再理,何苦呢?浪费了时间还消磨了耐心!切记!

这个程序的收获:

题目:143. Reorder List

You are given the head of a singly linked-list. The list can be represented as:

Reorder the list to be on the following form:

You may not modify the values in the list's nodes. Only nodes themselves may be changed.

Example 1:

img

Example 2:

img

Constraints:


代码1(配 · 手绘过程图)

获取链表的两半:

image-20240411175705890

合并链表的两半:

image-20240411180111119

代码解读 | 评价

程序的思路比较简单

  1. 首先把链表分为两半;

    • 方法有很多:

      • 可以用cnt计数,然后cnt/2;

      • 也可以用双指针,一个跑的快,一个跑的慢;跑的快的变为null了,跑的慢的刚好指向中间的那个分割点。

  2. 后一半逆序

  3. 然后把第一半和最后一半交替接起来。